home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / game / patch / WHDIGamesC-D.lzh / Deflektor.lha / Deflektor / deflektorslave.asm < prev    next >
Assembly Source File  |  2000-11-09  |  6KB  |  338 lines

  1. ;*---------------------------------------------------------------------------
  2. ;  :Program.    deflektorslave.asm
  3. ;  :Contents.    Slave for "Deflektor"
  4. ;  :Author.    Harry
  5. ;  :History.    12.07.97/30.10.2000/9.11.2000
  6. ;  :Requires.    whdload-package :)
  7. ;  :Copyright.    Freeware
  8. ;  :Language.    68000 Assembler
  9. ;  :Translator.    ASM-One 1.25
  10. ;  :To Do.
  11. ;---------------------------------------------------------------------------*
  12.  
  13. ;crc_v1    = $3E9F
  14. ;crc_v2    = $34C8
  15.  
  16. WHDLV    = 10
  17.  
  18.     INCDIR    asm-one:Include2.0/
  19.     INCLUDE    own/whdload.i
  20.     INCLUDE    own/CCRMAKRO
  21.  
  22. checkdisk=0
  23.  
  24. ;    OUTPUT    wart:gods/gods.slave
  25. ;    BOPT    O+ OG+            ;enable optimizing
  26. ;    BOPT    w4-            ;disable 64k warnings
  27.  
  28. ;======================================================================
  29. SLBASE
  30. .base        SLAVE_HEADER        ;ws_Security + ws_ID
  31.         dc.w    WHDLV        ;ws_Version
  32.         dc.w    WHDLF_Disk!WHDLF_NoError!WHDLF_EmulTrap    ;ws_flags
  33.         dc.l    $80000        ;ws_BaseMemSize            ;$bc000
  34.         dc.l    $00        ;ws_ExecInstall
  35.         dc.w    SLStart-.base    ;ws_GameLoader
  36.         dc.w    0        ;ws_CurrentDir
  37.         dc.w    0        ;ws_DontCache
  38. _keydebug    dc.b    $5C        ;ws_keydebug = F9
  39. _keyexit    dc.b    $5D        ;ws_keyexit = F10
  40.  
  41.         IF    WHDLV>=10
  42.         DC.L    0        ;no fastmem
  43.         dc.w    slname-SLBASE
  44.         dc.w    slcr-SLBASE
  45.         dc.w    slinst-SLBASE
  46. ***********************************************************************
  47. slname        dc.b    'Deflektor',0
  48. slcr        dc.b    '1988 Gremlin',0
  49. slinst        dc.b    'HD-V1.11 Nov. 2000 by Harry',0
  50.         ENDC
  51.  
  52. ;======================================================================
  53.  
  54. ;    DOSCMD    "WDate >T:date"
  55.         dc.b    "$VER:Deflektor_Slave_1.11"
  56. ;    INCBIN    "T:date"
  57.         dc.b    0
  58.         even
  59.  
  60. ;======================================================================
  61. SLStart    ;    A0 = resident loader
  62. ;======================================================================
  63.  
  64.         lea    (_resload,pc),a1
  65.         move.l    a0,(a1)            ;save for later using
  66.  
  67.         move.l    #CACRF_EnableI,d0    ;enable instruction cache
  68.         move.l    d0,d1            ;mask
  69.         jsr    (resload_SetCACR,a0)
  70.  
  71.     MOVE.B    _keyexit(PC),d0
  72.     LEA.L    KEYHP\.qkey(PC),a0
  73.     MOVE.B    d0,(A0)
  74.     move.b    #$81,$bfed01
  75.  
  76.     MOVEQ    #0,D0
  77.     MOVE.L    #$1770,D1
  78.     LEA    $20000,A0
  79.     MOVEQ    #1,D2
  80.     MOVE.L    _resload(PC),A2
  81.     jsr    (resload_DiskLoad,a2)
  82.  
  83.                     ;check disk version
  84.     IFEQ    1
  85.     MOVE.L    #$1200,D0
  86.     LEA.L    $7FC.W,A0
  87.     jsr    (resload_CRC16,a2)
  88.  
  89.     moveq    #1,d1
  90.     cmp.w    #crc_v1,d0
  91.     beq    .set
  92.     moveq    #2,d1
  93.     cmp.w    #crc_v2,d0
  94.     beq    .set
  95.     bra    _badver
  96. .set    lea    version,a0
  97.     move.w    d1,(a0)
  98.  
  99.     LEA.L    $400.W,A0
  100.     MOVE.W    #$100-2,D0
  101. .CLR1    CLR.L    (A0)+
  102.     DBF    D0,.CLR1
  103.     MOVE.W    version(PC),D1
  104.     CMP.W    #2,D1
  105.     BEQ.S    .V2
  106.     ENDC
  107.     
  108.  
  109.  
  110.  
  111.  
  112.     MOVE.W    #$4E75,$205DC
  113.     MOVE.W    #$4E75,$20560
  114.     MOVE.W    #$4E75,$205AC
  115.     MOVE.W    #$4E75,$20496
  116.     MOVE.W    #$4E75,$2008E
  117.     MOVE.W    #$601C,$20172
  118.     MOVE.W    #$4EF9,$20752
  119.     PEA    LOADROUT(PC)
  120.     MOVE.L    (A7)+,$20754
  121.  
  122.     MOVE.W    #$2000,SR
  123.     BSET    #1,$BFE001
  124.     JMP    $20000
  125.  
  126. leftturn
  127.     move.w    $10f2.w,d0    ;if turn clock- and anticlockwise
  128.     or.w    $10f6.w,d0    ;together, dont turn
  129.     beq.s    .2
  130.     move.w    $10f4.w,d0
  131.     or.w    $10f8.w,d0
  132.     bne.s    .return
  133.  
  134. .2    lea.l    lturn(PC),a2    ;added controls
  135.     tst.w    $10f2.w
  136.     beq.s    .1
  137.     tst.b    (A2)
  138.     bne.s    .skip
  139.     st    (A2)
  140.     ZEROCLEAR
  141.     rts
  142.  
  143. .1    sf    (A2)
  144. .skip    tst.w    $10f6.w
  145.     rts
  146.  
  147. .return    addq.l    #4,a7        ;skip rest of mirrorturn
  148.     rts
  149.  
  150. rightturn
  151.     lea.l    rturn(PC),a2
  152.     tst.w    $10f4.w
  153.     beq.s    .1
  154.     tst.b    (A2)
  155.     bne.s    .skip
  156.     st    (A2)
  157.     ZEROCLEAR
  158.     rts
  159.  
  160. .1    sf    (A2)
  161. .skip    tst.w    $10f8.w
  162.     rts
  163.  
  164. pause
  165.     movem.l    a0/a1/d0,-(A7)
  166.     lea.l    $3c42.w,a0
  167.     lea.l    lastp(PC),a1
  168.     move.b    (A1),d0
  169.     move.b    $59*2(A0),(A1)
  170.     beq.s    .skip
  171.  
  172.     tst.b    d0
  173.     bne.s    .nochange
  174.                 ;toggle pause mode
  175.     not.b    1(A1)
  176. .nochange
  177.  
  178.     tst.b    1(A1)
  179.     bne.s    .pause
  180.  
  181. .skip
  182.     movem.l    (A7)+,a0/a1/d0
  183.     addq.l    #1,$3c02.w
  184.     rts
  185.  
  186. .pause
  187.     MOVEM.L    (A7)+,a0/a1/d0
  188.     addq.l    #4,a7
  189.     rts
  190.  
  191. ;D0-PARTADDY
  192. ;20822-PARTAREA
  193. ; 0(PARTAREA,D0*$10) - MEMDEST
  194. ; 4(PARTAREA,D0*$10) - STARTTRACK
  195. ; C(PARTAREA,D0*$10) - LENGTH
  196.  
  197.  
  198. LOADROUT
  199.     MOVEM.L    D0-A6,-(A7)
  200.     MOVE.L    D0,D6
  201.     MULU    #$10,D0
  202.     LEA.L    $20822,A1
  203.  
  204.     MOVEQ.L    #1,D2        ;DISK#
  205.     MOVE.L    $C(A1,D0.W),D1    ;LENGTH
  206.     MOVE.L    (A1,D0.W),A0    ;MEMDESTINATION
  207.     MOVE.L    4(A1,D0.W),D0
  208.     SUBQ.W    #2,D0
  209.     MULU    #$1770,D0    ;DISKSTART
  210.     move.l    (_resload,pc),a3
  211.     jsr    (resload_DiskLoad,a3)
  212.  
  213.     CMP.B    #1,D6
  214.     BNE.W    .EX
  215.     MOVE.W    #$4EB9,$912.W
  216.     PEA    KEYHP(PC)
  217.     MOVE.L    (A7)+,$914.W
  218.     MOVE.W    #$4E77,$827E    ;correct stackframe
  219. ;    move.w    #$4afc,$1394.w
  220.     move.w    #$c2,$12c8.w    ;fix keyboard problem: shift as firebutton
  221.  
  222.     move.w    #$4ef9,$2cb4.w
  223.     pea    SAVEHIGH(PC)
  224.     move.l    (A7)+,$2cb6.w
  225.  
  226.     move.w    #$4eb9,$138c.w
  227.     pea    leftturn(PC)
  228.     move.l    (A7)+,$138e.w
  229.     move.w    #$4eb9,$139e.w
  230.     pea    rightturn(PC)
  231.     move.l    (A7)+,$13a0.w
  232.     move.w    #$4eb9,$3c06.w
  233.     pea    pause(PC)
  234.     move.l    (A7)+,$3c08.w
  235.  
  236.     ifeq    1
  237.     MOVE.L    #$800,D0
  238.     LEA.L    $6000.w,A0
  239.     MOVE.L    _RESLOAD(PC),A2
  240.     JSR    RESLOAD_PROTECTWRITE(A2)
  241.     endc
  242.  
  243.     lea    HINAME(PC),a0    ;filename
  244.     move.l    _resload(PC),a3
  245.     jsr    (resload_GetFileSize,a3)
  246.     tst.l    d0
  247.     beq.s    .EX
  248.  
  249.     move.l    $3bf0.w,d7
  250.     move.l    $3bf4.w,d6
  251.     LEA.L    $3b3c.w,A1
  252.     MOVE.L    #$bc,D0
  253.     lea    HINAME(PC),a0    ;filename
  254.     jsr    (resload_LoadFile,a3)
  255.  
  256.     lea.l    $3b3c.w,a1
  257.     moveq.l    #($b4/4)-1,d1
  258.     moveq.l    #0,d0
  259.     moveq.l    #0,d2
  260. .sum    add.l    (A1)+,d0
  261.     eor.l    d0,d2
  262.     dbf    d1,.sum
  263.     cmp.l    $3bf0.w,d0
  264.     bne.w    quit
  265.     cmp.l    $3bf4.w,d2
  266.     bne.w    quit
  267.     move.l    d7,$3bf0.w
  268.     move.l    d6,$3bf4.w
  269.  
  270. .EX    MOVEM.L    (A7)+,D0-A6
  271.     MOVEQ.L    #0,D0
  272.     RTS
  273.  
  274. SAVEHIGH
  275.     move.w    $2cc0.w,$3d52.w
  276.     MOVEM.L    D0-D2/A0-A2,-(A7)
  277.     move.l    $3bf0.w,d7
  278.     move.l    $3bf4.w,d6
  279.  
  280.     LEA.L    $3b3c.W,A1        ;ADDY
  281.     moveq.l    #($b4/4)-1,d1
  282.     moveq.l    #0,d0
  283.     moveq.l    #0,d2
  284. .sum    add.l    (A1)+,d0
  285.     eor.l    d0,d2
  286.     dbf    d1,.sum
  287.     move.l    d0,$3bf0.w
  288.     move.l    d2,$3bf4.w
  289.  
  290.     LEA.L    $3b3c.W,A1        ;ADDY
  291.     MOVE.L    #$bc,D0        ;len
  292.     lea    HINAME(PC),a0        ;filename
  293.  
  294.     move.l    _resload(pc),a2
  295.     jsr    (resload_SaveFile,a2)
  296.     move.l    d7,$3bf0.w
  297.     move.l    d6,$3bf4.w
  298.  
  299. .SKIP    MOVEM.L    (A7)+,D0-D2/A0-A2
  300.  
  301.     RTS
  302.     
  303.  
  304.  
  305. ;version    dc.w    0    ;version of disks
  306. _resload    dc.l    0    ;address of resident loader
  307. HINAME    dc.b    'deflhigh',0
  308. lturn    dc.b    0
  309. rturn    dc.b    0
  310. lastp    dc.b    $ff
  311. spause    dc.b    0
  312.     even
  313.  
  314. ;======================================================================
  315.  
  316.  
  317.  
  318.  
  319. ; RAW-Key-Codes:
  320. ;    ESC    $45
  321. ;    DEL    $46
  322. ;    F1..F10    $50..$59
  323. ;    HELP    $5f
  324.  
  325. KEYHP    MOVE.B    D0,$8EE.W
  326.     CMP.B    #$59,D0
  327. .qkey    equ    *-1
  328.     BEQ.W    QUIT
  329.     RTS
  330.  
  331. QUIT
  332. .exit    pea    TDREASON_OK
  333. ;    bra    _end
  334. ;_badver    pea    TDREASON_BADVERSION
  335. _end    move.l    (_resload,pc),-(a7)
  336.     add.l    #resload_Abort,(a7)
  337.     rts
  338.